package de.haw.HES.Disposition.services;

import java.sql.Date;
import java.util.List;

import de.haw.HES.Disposition.Lieferung;
import de.haw.HES.Disposition.Transportauftrag;
import de.haw.HES.Disposition.Extern.TransportServiceProvider;
import de.haw.HES.Disposition.Extern.TransportServiceProviderKonnektor;
import de.haw.HES.base.PersistenceManager;

public class LieferungSerivceImpl implements LieferungSerivce {

	private PersistenceManager persistenceManager;
	private TransportServiceProvider externalKonnektor;
	
	public TransportServiceProvider getExternalKonnektor() {
		if(externalKonnektor == null) {
			externalKonnektor = new TransportServiceProviderKonnektor();
		}
		return externalKonnektor;
	}
	public void setExternalKonnektor(TransportServiceProvider externalKonnektor) {
		this.externalKonnektor = externalKonnektor;
	}

	public void setPersistenceManager(PersistenceManager pPersistenceManager) {
		this.persistenceManager = pPersistenceManager;
	}

	@Override
	public void createLieferung(Date datum, String dienstleister) {

		Lieferung neueLieferung = new Lieferung();
		Transportauftrag transport = new Transportauftrag();
		
		transport.setAusgangsDatum(datum);
		transport.setLieferungErfolgt(false);
		transport.setTransportdienstleister(dienstleister);
		
		neueLieferung.setTransportauftrag(transport);
		
		persistenceManager.write(neueLieferung);
		
	}

	@Override
	public Lieferung getLieferung(Integer id) {
		final List<Lieferung> find = persistenceManager.find(new Lieferung(), Lieferung.class.getName());
		for(Lieferung l : find) {
			if(l.getId() == id) {
				return l;
			}
		}
		return null;
	}
	
	public void updateDeliverance(Transportauftrag auftrag) {
		if(auftrag.isLieferungErfolgt()) {
			return;
		}
		final boolean hasBeenDelivered = getExternalKonnektor().hasBeenDelivered(auftrag.getExternalId());
		if(hasBeenDelivered) {
			auftrag.setLieferungErfolgt(true);
		}
		persistenceManager.update(auftrag);
	}
	
}
